package Day07;
/*
 折半（二分）查找算法：使用的前提    必须有序
{23,34,45,56,67,78,89}
 1-100
 */
public class ArrayDemo06 {
    public static void main(String[]args){
        //1.定义数组
        int []arr={23,34,45,56,67,78,89};

        //调用这个折半查找算法
        System.out.println(binarySearch(arr,34));
        System.out.println(binarySearch(arr,89));
        System.out.println(binarySearch(arr,100));

    }
    /*
    方法中变化的量有哪些？
       数组不确定
       查找的元素也不确定

    方法返回值类型定义？
        我们这里还是在调用方法后获取查找的元素的索引
     */
    public static int binarySearch(int[]arr,int key){
        //定义两个边界值
        int min=0;
        int max=arr.length-1;

        while(min<=max){//min>max时候停止查找
            int mid=(min+max)/2;//求出中间元素的索引
            if (key==arr[mid]){
                return mid;
            }else if(key>arr[mid]){
                min=mid+1;
            }else{//key<mid
                max=mid-1;
            }
        }
        //当执行到while循环下方，此时min》max，说明此时这个元素在数组中找不到
        return -1;
    }
}
